package JVM.第01篇_字节码篇;

/**
 * 1. Java拟机是通过某些数据类型来执行计算的，数据类型可以分为两种:
 * 基本类型和引用类型，
 *    基本类型的变量持有原始值，
 *         整型：byte(1字节 -128~127) \ short(2字节) \ int(4字节 约21亿) \ long(8字节)
 *        浮点型： float(4字节) \ double (8字节)
 *        字符型： char(2个字节)
 *        布尔型： boolean
 *        和  returnAddress //返回的地址 就是地址
 *    引用类型的变量持有引用值。
 *
 * 2. Java语言中的所有基本类型同样也都是Java虚拟机中的基本类型。
 *    但是boolean有 点特别，虽然Java 虚拟机也把boolean看做基本类型，
 *    但是指令集对boolean只有很有限的支持，
 *    当编译 器把Java源代码编译为字节码时，它会用int或者byte来表示boolean.
 *    在Java虚拟机中，false是 由整数零来表示的，所有非零整数都表示true,
 *    涉及boolean值的操作则会使用int.
 *    另外，boolean数组是当做byte数组来访问的。
 * 3. Java虚拟机还有个只在内部使 用的基本类型: returnAddress.
 *    Java程序员不能使用这个类型，
 *    这个基本类型被用来实现Java程序中的finally子句。
 *    该类型是jsr, ret以及jsr_w指令需要使用到的，它的值是JM指令的操作码的指针。
 *    returnAddress类型不是简单意义上的数值，不属于任何一种基本类型，
 *    并且它的值是不能被运行中的程序所修改的。
 * 4. Java虚拟机的引用类型被统称为 “引用(reference) ”，
 *   有三种引用类型:类类型、接口类型、以及数组类型，
 *   它们的值都是对动态创建对象的引用。
 *   类类型的值是对类实例的引用，数组类型的值是对数组对象的引用，
 *   在Java虚拟机中，数组是个真正的对象，而接口类型的值，则是对实现了该接口的某个类实例的引用。
 *   还有种特殊的引用值是null， 它表示该引用变量没有引用任何对象。
 *
 *
 * ①为什么不把基本类型放堆中呢?
 *       首先是栈、堆的特点不同。 (堆比栈要大，但是栈比堆的运算速度要快。)
 *
 * 将复杂数据类型放在堆中的目的是为了不影响栈的效率，而是通过引用的方式去堆中查找。
 * (八大基本类型的大小创建时候已经确立大小。三大引用类型创建时候无法确定大小)
 *
 * 简单数据类型比较稳定，并且它只占据很小的内存，将它放在空间小，运算速度快的栈中，能够提高效率。
 *
 * ② Java中的参数传递是传值呢?还是传引用?  传值
 * ③ Java中有没有指针的概念
 *     指针具有您可能(或可能不会)通常使用的额外操作;
 *     引用缺少这些操作，因为这些操作可能不安全。
 *
 *
 */
public class F_java虚拟机数据类型 {
    public static void main(String[] args) {

    }
}
